package de.wittekind.bundesjugendspiele.server.impl.rmi;

import java.io.IOException;
import java.rmi.server.UnicastRemoteObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import de.wittekind.bundesjugendspiele.server.interfaces.Discipline;
import de.wittekind.bundesjugendspiele.server.interfaces.Riege;
import de.wittekind.bundesjugendspiele.server.interfaces.RiegenLoader;
import de.wittekind.bundesjugendspiele.server.interfaces.Schueler;
import de.wittekind.bundesjugendspiele.server.interfaces.Try;

/**
 * @author Sascha Wegener
 * 
 * @version 17.04.2013
 */
public class RMIRiegenLoader extends UnicastRemoteObject implements
		RiegenLoader {

	private static final long serialVersionUID = 3596247636375379839L;
	private RiegenLoader riegenLoader;

	public RMIRiegenLoader(RiegenLoader riegenLoader) throws IOException {
		this.riegenLoader = riegenLoader;
	}

	@Override
	public Riege getRiege(int id) throws IOException {
		return new RMIRiege(riegenLoader.getRiege(id));
	}

	@Override
	public int getRiegenAmount() throws IOException {
		return riegenLoader.getRiegenAmount();
	}

	@Override
	public int newRiege() throws IOException {
		return riegenLoader.newRiege();
	}

	@Override
	public void removeRiege(int i) throws IOException {
		riegenLoader.removeRiege(i);

	}

	@Override
	public Schueler[] getAllSchueler(int jahrgang) throws IOException {
		Schueler[] allSchueler = riegenLoader.getAllSchueler(jahrgang);
		for (int i = 0; i < allSchueler.length; i++) {
			allSchueler[i] = new RMISchueler(allSchueler[i]);
		}
		return allSchueler;
	}

	@Override
	@Deprecated
	public Map<Schueler, Try> getLatestResults(int count, Discipline discipline)
			throws IOException {
		throw new RuntimeException("Not implemented");
	}

	@Override
	@Deprecated
	public Map<Schueler, Try> getBestResults(int count, Discipline discipline)
			throws IOException {
		throw new RuntimeException("Not implemented");
	}

	@Override
	public Map<Schueler, Try> getLatestResults(int count,
			Discipline discipline, int year) throws IOException {
		Map<Schueler, Try> latestResults = riegenLoader.getLatestResults(count,
				discipline, year);
		Map<Schueler, Try> rmiLatestResults = new HashMap<Schueler, Try>();
		for (Map.Entry<Schueler, Try> e : latestResults.entrySet()) {
			rmiLatestResults.put(new RMISchueler(e.getKey()),
					new RMITry(e.getValue()));
		}
		return rmiLatestResults;
	}

	@Override
	public Map<Schueler, Try> getBestResults(int count, Discipline discipline,
			int year) throws IOException {
		Map<Schueler, Try> bestResults = riegenLoader.getBestResults(count,
				discipline, year);
		Map<Schueler, Try> rmibestResults = new HashMap<Schueler, Try>();
		for (Map.Entry<Schueler, Try> e : bestResults.entrySet()) {
			rmibestResults.put(new RMISchueler(e.getKey()),
					new RMITry(e.getValue()));
		}
		return rmibestResults;
	}

	@Override
	public int getMinJahrgang() throws IOException {
		return riegenLoader.getMinJahrgang();
	}

	@Override
	public int getMaxJahrgang() throws IOException {
		return riegenLoader.getMaxJahrgang();
	}

	@Override
	public ArrayList<Integer> getSiegerurkunden() throws IOException {
		return riegenLoader.getSiegerurkunden();
	}

	@Override
	public ArrayList<Integer> getEhrenurkunden() throws IOException {
		return riegenLoader.getEhrenurkunden();
	}

	@Override
	public int[] getRiegenIDs() throws IOException {
		// TODO Auto-generated method stub
		return null;
	}

}
